开源程序员绝望毁库跑路的背后
The following article is from 卫sir说 Author 卫剑钒
| 转载自:卫sir说
| 编辑:周晶晶
| 设计:张千禧
| 责编:王玥敏
最近发生了一件离奇的事,一般而言,程序员都把自己的开源项目代码看的珍贵无比,但却有一位程序员,把自己的开源代码弄得面目全非,宣布“endgame”。
已经有很多新闻报道了此事1,这里仅仅简要描述一下事件经过。
数千个使用了开源 NPM 包 faker.js 和 colors.js 的项目,在2022年1月上旬(1月5日~1月8日)发现,他们所用的项目代码已经完全“坏掉了”,而始作俑者竟是项目作者 Marak Squires的故意行为。
faker.js 可以生成测试用的虚拟数据,包括姓名、地址,公司,日期,财务,图像,随机数等。
colors.js提供对颜色的各种操作和计算,可实现控制台上带颜色文本的输出。
比如某些用户看到其控制台输出这样的乱码:
或是这样:
总之,Marak Squires把他亲手开发的faker.js和colors.js 项目的代码恶搞一通,使得下载了其最新版代码的用户,在node.js控制台上看到了大量奇奇怪怪的乱码,而且是无休止的输出。
好好的两个开源项目,为什么 Marak Squires 突然要自己搞破坏?
不想在开源界混了吗?
我想他大约真的不想在这个圈子混了。
原因何在?
很简单:伤心、绝望。
缘何伤心绝望?很简单,自己辛辛苦苦写代码,得不到收益。
早在2020年11月,Marak就已经发出警告,说不再“无偿工作”来支持那些商业巨头(许多大公司包括亚马逊云等都使用了他的代码)。
他原话翻译过来是这么说的:“不好意思,我不会再免费支持使用我代码的财富500强(以及其他小型公司)了,没有更多可说的,你们要么给我一份年薪六位数的劳动合同,要么找其他人在分支上干吧!”
当然,并没有公司雇佣了他。(这下就更不敢了)
Marak年近40,他19岁从麦吉尔大学毕业,在微软工作了5年。由于对封闭软件开发不满,辞职投向开源。
2010年之后,Marak对Node.js非常感兴趣,于是和好友联合创办Nodejitsu公司,还曾被评为纽约地区值得关注的25个创业之星。他们创建了最早的Node.js平台即服务(PaaS)业务。
2015年,Nodejitsu被GoDaddy收购。Marak Squires这个名字从各种新闻中销声匿迹,只有@marak作为开源贡献者依旧在社区中活跃,在Github上,他有90多个项目。但他若干年来,从开源项目中获得的赞助总计只有几千美元。
他也尝试过再次创业,但创办的Faker Cloud云服务并没有什么响动,Marak曾联系最大的赞助商Retool(Retool每月给他赞助500美元),看看他们是否有意收购。Retool CEO礼貌性地回了他邮件说会考虑,但随后再无音讯,却在其自家的产品中直接提供了与Faker Cloud一样的功能。
2020年10月,因公寓失火(有爆料说他玩炸药2),Marak在推特上求捐助,但所得不多,以至于有了11月份他赌气不再玩开源的言论。
总之,他虽然通过开源打开了一定局面,但求职、求收购都未能成功,求捐助也所得甚少,给人一种他几乎无法维持生计的感觉。
故事就介绍到这里。
这件事违法吗?
还到不了违法的地步。因为他的改动并没有什么真正的攻击力和危害,更多只是在node.js控制台上输出大量乱码,程序员按Ctrl+C(两次)或Ctrl+D即可退出,所以危害不大。法律没有说一个程序不能输出乱码,也没有说一个开源工作者不能毁掉自己的项目。
其实,一个主体提供程序,另一个主体使用程序,应该有一个协议或合同的,里面要明确双方的权责。比如要给多少钱,程序要实现什么功能和性能,什么时候交货等等。如果一方违约,另一方就可以进行追索,直至打上法院。
那么在这件事中,Marak和使用他程序的人之间,签了什么协议?
MIT协议。
这件事违背MIT协议吗?
这件事不违背MIT协议。
MIT协议很简短,可以理解为只有三句话:你可以免费用、随便用;要保留版权信息和许可信息;我不负责。
我们就看最后一句:我不负责。
原话是这么说的(翻译后):
本软件是“按原样“提供的,不附带任何明示或暗示的保证,包括没有任何有关适销性、适用性、非侵权性保证以及其他保证。在任何情况下,作者或版权持有人,对任何权益追索、损害赔偿以及其他追责,都不负任何责任。无论这些追责产生自合同、侵权,还是直接或间接来自于本软件以及与本软件使用或经营有关的情形。
这件事违背GitHubyong hu协议吗?
发生这件事后,GitHub把Marak的账号冻结了,Marak在推特上提出抱怨(他在上面有90多个项目呢)
。
网友Sergio Gómez说:“删改自己的代码也违反到GitHub的服务条款了?这是赤裸裸的绑架!我们最好做好分散托管软件源代码的准备。”
网友Piero说:“Marak搞乱了faker和colors,影响到无数项目,难道还指望着自己能不受一点牵连?”
那么,GitHub这样做到底对不对?
我看了一下GitHub服务条款,大概是违反了其中的第C款以及对应的“GitHub可接受使用策略”中的第2条或第10条:
第2条:直接支持造成技术伤害的非法主动攻击或恶意软件活动。
第10条:不得从事严重伤害其他用户的活动。
不过我觉得,就Marak改动代码带来的那点困扰,能谈得上一点“恶意”,但谈不上“严重伤害”。
所以,GitHub判得是有点重的,可能GitHub管理人员觉得这已经是“恶意软件”和“严重伤害”了吧!
反正解释权掌握在他们手中。
Marak反正也不玩开源了,估计也懒得和他们计较。
这件事危害大吗?
这件事,Marak到底做了什么?
他改了代码,上传了GitHub,同时上传了NPM仓库(应该是通过npm publish命令),也即向仓库声明并上传了最新版的包(faker.js包和colors.js包)。
受影响的人,多是从NPM取了这个最新版的包(多半是通过npm install)
,然后运行时发现了问题。
Marak肯定知道,大家发现后,可以回退使用以前的版本。
事实上,NPM官方已经将相关包回滚至先前版本。
所以,伤害并非不可逆的,而且可以简单的可逆。
而且,这种对最新版本包的尝试,大多都是在开发测试阶段进行的。
这也是这两个包每周下载量很大的原因之一,是因为很多程序员喜欢每日都下载最新的依赖包版本,以保证自己的代码和依赖都是最新的。
统计数据表明,出事前,faker.js的每周下载量有200多万,colors.js的每周下载量有2000多万3。(一开始看到这个巨量数字,我是懵的。心想这些程序员是疯了吗,天天下载?后来一问才知道,很多人做每日构建时自动取最新版)
但这个应该是在开发测试环境做的,影响的也只是开发测试人员,并不会影响到使用(依赖这两个包的)
软件产品的用户。
通常,生产版(发布版)应该是充分测试确保无误的情况下,才可以发布的。
所以,这个恶作剧按道理不会影响到一个软件的最终用户,只是开发测试人员大约会困惑2个小时(查找问题大约需要的时间)
。
毕竟,只有开发人员才用这两个包的。
在我看来,这是Marak用一种极端的方式告诉其他开发者:“我不玩了!”
这件事违背道德吗?
总而言之,虽然Marak很伤心,但这事做得不太好。
你可以不维护、不更新你的项目,但不能乱搞一气泄愤,并让很多程序员困惑。
这显然严重地损害了他在开源圈的声誉,我想,知道这件事的程序员,以后用faker.js和colors.js的时候,心里都会怪怪的吧。
这暴露了他在心理上还很不成熟。
GitHub上有人评价此事说“What a child.”,这个评价非常精到。
道德的标准有很多,所以不好一概而论,我们看一下计算机道德规范协会(Computer Ethics Institute)制定的10条戒律:
1) 不准使用计算机危害他人。
2) 不准妨碍他人的计算机工作。
3) 不准窥探他人的计算机文件。
4) 不准使用计算机进行偷盗。
5) 不准使用计算机作伪证。
6) 不准私自复制未付费的专用软件。
7) 不准未被授权使用他人的计算机。
8) 不准盗用他人的知识产品。
9) 必须考虑所编写程序或所设计系统的社会后果。
10) 必须总是以确保关心和尊重同事的方式使用计算机。
原文如下:
Marak在一定程度上,违背了第2条和第9条。
所以这件事,总的来说,不太好,虽然也不太严重。
这件事的后续影响?
这件事的最大好处是:提醒使用开源的人,长个心眼,不要什么代码你都那么信任。
这就是专家们常说的“供应链风险”。
最常见的风险是:代码不安全;断供。
代码不安全那是必然存在的,谁能保证自己的代码完全没有安全问题呢?
断供也是必然会存在的,谁能保证一个开源项目一直有人维护呢?
大多数开源代码,本来又没有要钱,你哪好意思要求人家那么多呢?
本来开发者就是用爱发电嘛!你又没给钱,不能要求太多。
而且,我想,人们肯定会继续使用Marak的faker.js和colors.js,然后继续不给他钱。
然后,也许会有一位心理更强大的同志接手它们,或分叉它们。
程序员如何通过开源赚钱?
大概有这么几种方法吧:
被雇佣(比如Linus、尤雨溪都曾被雇佣)
被基金会或大公司资助(比如Linux、Spark等)
卖商业版(比如MiniGUI、VirtualApp等)
创业(比如Nginx,TDengine、Confluent等)
公司被收购(比如MySQL、Docker、Nginx等)
做服务(提供收费的云服务,或者提供维保服务)
……
不过,Marak似乎都试过了,都没成功。(除了他被收购的Nodejitsu)
所以有点绝望了。
开源程序员应该赚到钱吗?
一个人的作品被广为使用,他是不是应该赚到钱?
我觉得从道德上讲,理应如此。
但现实是残酷的,人们的心理很简单,既然有不花钱的可用,为什么要花钱。
而且faker.js和colors.js就是因为免费,才被广为使用。(如果他是收费的,就有人会推出免费的)
开源程序员可能早就应该想明白,你要的是名,还是利,还是都想要。
在现有的开源机制下,如果你代码写得好,也确实解决了一些问题,赚到名是可行的。
但想要赚到钱,就要努力更多了,就像我上面说的,你要有能力把你的代码商业化。
如果现在还不行,就天天思考这个问题,直到找到解决方案。
不过,像faker.js、colors.js这种项目,由于功能比较简单,也没有太深的技术壁垒,商业化显然是困难重重。
现有的开源运营机制也无法支持按使用量付费。
所以Marak要想出更好的办法来,或者等待更好的机制出现。
能否有更好的机制?
我想肯定会有,因为几乎所有聪明的程序员,都在想这个问题:我不被雇佣,不被捐助,也不创业,能否从我的代码赚钱?
数字世界(包括互联网)是程序员们搭建起来的乐园,但他们基本上是以义务劳动或者被雇佣形态(赚的不多)来工作的。
因为在数字世界建造的早期,他们的实力还不足以让他们改变现有的商业模型,仍然是现实世界的资本和资金控制着他们。
但数字世界会越来越强大,现实世界的一切,都会或早或晚地迁移到数字世界中来。这就是为什么“元宇宙”概念自92年提出后,历经30年,终于开始被世人正视的原因。
程序员,这些数字世界的建造者,不会不考虑自己的利益,他们以前没有做到,现在可能也没有做到,但以后肯定能做到。
所以我们看到,程序员发明出来数字世界里的原生货币:加密货币;发明出来数字世界里的组织架构:DAO;以及一切他们能够掌握自己数字资产的方法和技术:Crypto、Web3、NFT。
程序员肯定会找到一种方法,把他们创造出来的有价值的资产(如代码、服务、系统等),以一种稳定、可靠、可持续的方式,获取收益。而不再依靠现实世界里的资本大佬。
这就是为什么越来越多为自己谋利益的聪明的程序员和黑客们,都转向了Crypto和Web3。
Marak也不例外。
他的地址是:marak.eth
他的资产在:opensea.io/Marak
文|卫剑钒
相关阅读 | Related Reading
这本书献给所有铸就开源世界的人们